% MainFun主函数，所有模拟传播的初始参数在此设定
% 通过多层相位屏和角谱传播的方法模拟光波在大气湍流中传播的情况
% Written by Benchu Lu; email:benchuul@163.com
% Taiyuan University of Technology
clear; close all; clc

% 光束和传播以及采样参数设定
params.D = 0.6; % 光场直径 [m]
params.N = 512; % 光场和相位屏的单边采样点数
params.lambda = 1060e-9; % Wavelength [m]
params.L = 1e3; % Propagation distance [m]
% 光束的二维光场函数生成（初始光束）
U_in = GaussianBeam(params, params.D/50); % 得额外输入一个高斯光束的宽度

% 湍流相位屏相关的参数
params.Cn2 = 1e-17; % 折射率结构常数，输入常数或函数句柄
params.layers = 4; % 相位屏层数
params.L0 = 10; % Outer-scale for turbulence [m]
params.l0 = 0.01; % Inner-scale for turbulence [m]
params.sp = 'p'; % 'p' for plane-wave; 's' for spherical wave

% 封装的函数
% 输出：经过大气传播后的复振幅光场，以及表述湍流效应的新参数
[U_out, params] = ActionFun(params, U_in);
% 光场是复数，要观察成像图需计算其光强图
I_out = U_out.*conj(U_out);
I_in = U_in.*conj(U_in);

% plotting
x = (-params.N/2 : params.N/2-1) * params.D/params.N; 
subplot(121);mesh(x,x,I_in),colorbar;
subplot(122);mesh(x,x,I_out),colorbar;


